// AC coder 410 E
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 3000 + 5;
int n;       // 总轮数
int h, m;    // h: 最大生命值, m: 最大魔法值
int a[MAXN]; // a[i]: 第i轮消耗的生命值
int b[MAXN]; // b[i]: 第i轮消耗的魔法值

// f[i][x]: 动态规划数组，表示前i轮中，使用x生命值时，消耗的最小魔法值
int f[MAXN][MAXN];

int main() {
  scanf("%d%d%d", &n, &h, &m);
  for (int i = 1; i <= n; ++i)
    scanf("%d%d", a + i, b + i);

  // 初始化DP数组为极大值
  memset(f, 0x3f, sizeof(f));
  f[0][0] = 0; // 初始状态：0轮时，0生命消耗，0魔法消耗

  for (int i = 1; i <= n; ++i) { // 处理每一轮

    bool flag = 0; // 标记当前轮是否有可行解

    for (int j = 0; j <= h; ++j) { // 遍历所有可能的生命值消耗
      // 选择使用魔法：继承上一轮j生命值状态，加上当前轮魔法消耗
      f[i][j] = f[i - 1][j] + b[i];

      // 如果当前生命值足够，可以选择消耗生命
      if (j >= a[i])
        f[i][j] = min(f[i][j], f[i - 1][j - a[i]]);

      // 检查当前状态是否满足魔法限制
      flag |= (f[i][j] <= m);
    }

    // 如果当前轮没有可行解，输出上一轮的结果
    if (flag)
      continue;
    else {
      printf("%d\n", i - 1);
      return 0;
    }
  }

  // 如果所有轮次都有解，输出总轮数
  printf("%d\n", n);
  return 0;
}